﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Entidades.Seguridad;
using Entidades.Sistema.Base;
using MvcPaging;
using Modelo.Sistema.Base;
using Modelo.Seguridad;
using System.Web.UI.WebControls;
using VistaOnlineR1._1.Models;
using System.ComponentModel.DataAnnotations;
using DevExpress.Web.Mvc;

namespace VistaOnlineR1._1.Controllers.Sistema.Base
{
    public class CargoController : BaseController
    {
        private const int DefaultPageSize = 10;

        #region campos
        CatalogoCargo _catalogoCargo;
        CatalogoGrupos _catalogoGrupo;
        #endregion

        #region Constructors
        public CargoController()
            : this(new CatalogoCargo(), new CatalogoGrupos())
        {
        }
        public CargoController(CatalogoCargo catalogoCargo, CatalogoGrupos catalogoGrupo)
        {
            _catalogoCargo = catalogoCargo;
            _catalogoGrupo = catalogoGrupo;
        }

   
        #endregion


       
        public ActionResult Index(int? page)
        {
            List<Perfil> listPerfil = RecuperarPerfil();

            ViewBag.PermisoDelete = listPerfil.Any(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCrear = listPerfil.Any(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEditar = listPerfil.Any(per => per.Permiso.Nombre == "Edit");

            return View(_catalogoCargo.ListarCargo());
        }

        [ValidateInput(false)]
        public ActionResult EditCargosPartial()
        {
            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");
            ViewBag.Cargo = _catalogoCargo.ListarCargo();

            return PartialView("EditCargosPartial", _catalogoCargo.ListarCargo());
        }


        [HttpGet]
        public ActionResult EditCargosUpdatePartial(int idCargo)
        {
            Cargo oCargo = _catalogoCargo.BuscarCargo(idCargo);
            ViewBag.Grupo = _catalogoGrupo.ListarGrupos().ToList();            
            if (oCargo == null)
            {
                oCargo = new Cargo();
                oCargo.IdCargo = -1;
            }

            return View("EditingForm", oCargo);
        }

        [HttpPost]
        [Authorize(Roles = "Administracion")]
        public ActionResult EditCargosUpdatePartial(Cargo Cargo)
        {
            string[] selectedItems = CheckBoxListExtension.GetSelectedValues<string>("lbModels");

            foreach (var item in selectedItems)
            {
                Grupo oGrupo = _catalogoGrupo.BuscarGrupo(item.ToString());
                Cargo.AgregarGrupo(oGrupo);
            }
            if (Cargo.IdCargo == -1)
                _catalogoCargo.AgregarCargo(Cargo);
            else
                _catalogoCargo.ModificarCargo(Cargo);

            return RedirectToAction("Index");
        }


        //[HttpPost, ValidateInput(false)]
        public ActionResult EditCargosDeletePartial(int IdCargo)
        {
            if (IdCargo >= 0)
            {
                try
                {
                    _catalogoCargo.EliminarCargo(_catalogoCargo.BuscarCargo(IdCargo));
                }
                catch (Exception e)
                {
                    ViewData["EditError"] = e.Message;
                }
            }

            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");

            ViewBag.Grupo = _catalogoGrupo.ListarGrupos().ToList();

            return PartialView("EditCargosPartial", _catalogoCargo.ListarCargo());
        }
    }
}